import { _decorator, Vec3 , Node} from 'cc';
import { SkillManager } from './SkillManager';
import { EBuff, EGroup, EntityType, ESkill } from '../Config/Enum';
import ObjectPoolManager from '../Core/ObjectPoolManager';
import { Collider2D } from 'cc';
import { PlayerManager } from '../PlayerManager';
import { BattleManager } from '../BattleManager';
import { EnemyManager } from '../EnemyManager';


const { ccclass } = _decorator;
// 武学二：九阴白骨爪 峨眉掌法，向前方挥出凌厉的寒冰爪风无视防御（450%伤害）//考虑丽桑卓的移动
// 符文1 - 玄阴蚀骨 降低目标30%防御 3s
// 符文2 - 分光化影 攻击分裂成4道爪风（每道70%伤害）
// 符文3 - 北冥吸星 释放回复怒气30


@ccclass('EmeiSkill2')
export class EmeiSkill2 extends SkillManager {
    private _hasSplit = false;
    runeId
    effectChance
    buffTypeList
    buffDuration
    

    // 新增标志：是否是主子弹（由玩家直接发射的子弹）
    private isMasterBullet = true;
    pm
    _originalDirection: Vec3;
    enemyDirection: Vec3;

    init(type: ESkill, pm: PlayerManager) {
        // 重置所有状态
        this.pm = pm;
        //this.reset();
        super.init(type, pm);

        this._originalDirection = this.direction.clone(); 

        
        // 只有主子弹需要重置分裂标志
        if (this.isMasterBullet) {
            this._hasSplit = false;
        }



        // 其他符文效果
        switch (this.runeId) {
            case 1:
                break;
            case 2: //分光化影 攻击分裂成4道爪风（每道70%伤害）
                if (!this._hasSplit) {
                    console.log("emei2 skill2 rune2 this._hasSplit",this._hasSplit)
                    this.splitInto4Bullets();
                    //this._hasSplit = true; // 标记为已分裂
                    //ObjectPoolManager.Instance.ret(this.node); // 立即回收主子弹
                }
                break;  
            case 3:
                               
                break;
            default:
                //console.warn(`未知符文ID: ${this.runeId}`);
                break;
        }
    }

    protected onHitEnemy(self, other: Collider2D): void {
        this.em = other.node.getComponent(EnemyManager)
                switch (this.runeId) {
            case 1: //降低目标30%防御 3s
                this.applyBuffToEnemy(this.em, 0.3,EBuff.DefenceDown, 0.3, 2)
                break;
            case 2:

                
                this.applyBuffToEnemy(this.em,0.2, EBuff.Slow, 0.5, 3); // 减速50%，持续3秒
                break;
            case 3: //会心一击回复怒气
                this.isCritical = Math.random() < this.criticalChance + this.pm.criticalChance
                if(this.isCritical){
                    this.pm.addRage(20)
                }
                    
                break;
            default:
                break;
        }

        super.onHitEnemy(self, other,this.isCritical);

    }

    splitInto4Bullets(){
        // for (let i = 0; i < 4; i++) {

        //     console.log("emei2 splitInto$Bulletsfor")
        //     this.scheduleOnce(() => {
        //         this.spawnBullet(i)
        //     }, i * 0.8); // 每个敌人间隔0.8秒

        
        // }
        // //ObjectPoolManager.Instance.ret(this.node);
    
                // 使用全局定时器，不受节点回收影响
                for (let i = 0; i < 4; i++) {
                    setTimeout(() => {
                        this.spawnBullet(i);
                    }, i * 500); // 使用毫秒
                }
                
                ObjectPoolManager.Instance.ret(this.node); // 立即回收主子弹
    }

    spawnBullet(i){
        // 从对象池获取新子弹

        
        // 设置新子弹位置
        if(!BattleManager.Instance.sortedEnemies[i]) {
            return
        }
        const bulletNode = ObjectPoolManager.Instance.get(this.type);
        bulletNode.setWorldPosition(BattleManager.Instance.sortedEnemies[i].worldPosition);

        const bullet = bulletNode.getComponent(EmeiSkill2);
        if (bullet) {
            // 分裂子弹的配置
            bullet.isMasterBullet = false; // 标记为非主子弹
            bullet._hasSplit = true;
            bullet.damage = this.damage * 0.7; // 70%伤害
            //bullet._originalDirection = originalDir.clone(); // 保持原方向
            
            // 初始化子弹（使用相同的玩家管理器和武学类型）
            bullet.init(this.type, this.pm);
            
            // 设置符文ID（与主子弹相同）
            bullet.runeId = this.runeId;
            
            // 添加到场景
            if (this.node.parent) {
                this.node.parent.addChild(bulletNode);
            }
        }

    }


// splitInto4Bullets() {
//     // 获取当前子弹的位置和方向
//     const currentPos = this.node.position.clone();
//     const originalDir = this._originalDirection.clone();
    
//     // 计算垂直于原方向的向量（用于偏移）
//     const perpendicular = new Vec3(-originalDir.y, originalDir.x, 0);
//     perpendicular.normalize();
    
//     // 四道爪风的偏移量（间隔75单位）
//     const offsets = [
//         Vec3.multiplyScalar(new Vec3(), perpendicular, -125), // 左1（-75）
//         Vec3.multiplyScalar(new Vec3(), perpendicular, -50), // 左2（-25）
//         Vec3.multiplyScalar(new Vec3(), perpendicular, 25),  // 右1（+25）
//         Vec3.multiplyScalar(new Vec3(), perpendicular, 100)   // 右2（+75）
//     ];
    
//     // 创建四道分裂爪风
//     for (let i = 0; i < 4; i++) {
//         // 计算新子弹位置
//         const newPos = new Vec3();
//         Vec3.add(newPos, currentPos, offsets[i]);
        
//         // 从对象池获取新子弹
//         const bulletNode = ObjectPoolManager.Instance.get(this.type);
//         if (!bulletNode) continue;
        
//         // 设置新子弹位置
//         bulletNode.setPosition(newPos);
        
//         // 获取子弹组件并初始化
//         const bullet = bulletNode.getComponent(EmeiSkill2);
//         if (bullet) {
//             // 分裂子弹的配置
//             bullet.isMasterBullet = false; // 标记为非主子弹
//             bullet._hasSplit = true;
//             bullet.damage = this.damage * 0.7; // 70%伤害
//             bullet._originalDirection = originalDir.clone(); // 保持原方向
            
//             // 初始化子弹（使用相同的玩家管理器和武学类型）
//             bullet.init(this.type, this.pm);
            
//             // 设置符文ID（与主子弹相同）
//             bullet.runeId = this.runeId;
            
//             // 添加到场景
//             if (this.node.parent) {
//                 this.node.parent.addChild(bulletNode);
//             }
//         }
//     }
// }



}